package com.wnx.job.modules.jms.controller;

import com.wnx.job.common.api.Const;
import com.wnx.job.common.api.PageResult;
import com.wnx.job.common.api.QueryPageBean;
import com.wnx.job.common.api.ResultData;
import com.wnx.job.common.mapstruct.StudentMapper;
import com.wnx.job.modules.jms.dto.StudentInfoParam;
import com.wnx.job.modules.jms.dto.StudentParam;
import com.wnx.job.modules.jms.model.JmsStudent;
import com.wnx.job.modules.jms.service.JmsStudentService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.security.Principal;
import java.util.Date;

/**
 * <p>
 * 学生 前端控制器
 * </p>
 *
 * @author wangnaixing
 * @since 2021-12-17
 */
@Slf4j
@RestController
@RequestMapping("/jms/jmsStudent")
@Api(tags = "StudentController",description = "学生资料管理")
public class JmsStudentController {

    @Resource
    private JmsStudentService studentService;



    /**
     * 增加学生
     *
     * @param studentParam
     */
    @PostMapping("/save")
    @ApiOperation("增加学生")
    public ResultData<String> save(@RequestBody @Validated StudentParam studentParam) {
        log.info("【=======系统正在增加学生中============】");
        studentService.saveStudent(studentParam);
        log.info("【==========系统新增学生成功！=============】");
        return ResultData.success(Const.ADD_STUDENT_SUCCESS);
    }

    /**
     * 删除学生
     * @param id
     * @return
     */
    @GetMapping("/delete/{id}")
    @ApiOperation("删除学生")
    public ResultData<String> delete(@PathVariable(name = "id") Long id) {
        log.info("【=========系统正在删除学生，删除学生ID为：{}=======】", id);
        studentService.deleteStudent(id);
        log.info("【============系统删除学生成功！！===========】");
        return ResultData.success(Const.DELETE_STUDENT_SUCCESS);
    }


    /**
     * 批量删除学生
     *
     * @return
     */
    @PostMapping("/deleteByBatch")
    @ApiOperation("批量删除学生信息")
    public ResultData<String> deleteByBatch(@RequestBody Long[] ids) {
        log.info("【======系统正在批量删除学生信息......====】");
        for (Long id : ids) {studentService.deleteStudent(id);}
        log.info("【======系统正在批量删除学生信息成功了！！！！====】");
        return ResultData.success(Const.DELETE_STUDENT_SUCCESS);
    }



    /**
     * 获取学生信息
     * @return
     */
    @GetMapping("/getStudentInfo")
    @ApiOperation("获取学生信息")
    public ResultData<StudentParam> getStudentInfo(Principal principal) {
        log.info("=========系统正在进行获取学生信息中==============");
        //通过认证主体，获取学生学号。
        String account = principal.getName();
        JmsStudent studentByDb = studentService.findByAccount(account);
        StudentParam studentParam = studentService.findById(studentByDb.getId());

        //返回结果集对象
        log.info("=========系统成功获取到学生信息成功！！！！==============");
        return ResultData.success(Const.QUERY_STUDENT_SUCCESS,studentParam);
    }


    /**
     * 学生完善自己个人信息
     * @param studentDto
     * @param principal
     * @return
     */
    @PostMapping("/changeStudentInfo")
    @ApiOperation("学生完善自己个人信息")
    public ResultData<String> changeStudentInfo(@Valid @RequestBody StudentInfoParam studentDto, Principal principal){
        log.info("=========系统正在进行学生完善自己个人信息中==============");
        //获取到前端的学生完善项的Dto

        //通过认证主体，获取学生学号。
        String account = principal.getName();

        //调用服务层，根据学生学号获取学生信息
        JmsStudent student = studentService.findByAccount(account);

        //设置Dto属性进学生信息
        student.setPhone(studentDto.getPhone());
        student.setPhoto(studentDto.getPhoto());
        student.setDescription(studentDto.getDescription());
        student.setPolitical(studentDto.getPolitical());
        student.setUpdated(new Date());
        student.setEmail(studentDto.getEmail());



        //调用服务层，修改学生信息
        studentService.updateById(student);

        log.info("=========系统成功学生完善自己个人信息成功！！！！==============");
        //返回结果集对象
        return ResultData.success(Const.ADD_STUDENT_SUCCESS);
    }



    /**
     * 修改学生
     * @param studentParam
     * @return
     */
    @PostMapping("/update")
    @ApiOperation("修改学生")
    public ResultData<String> update(@RequestBody @Validated StudentParam studentParam) {
        log.info("【=======系统正在修改学生中，该学生的信息为：============】");
        JmsStudent tbStudent = StudentMapper.INSTANCE.toPojo(studentParam);
        studentService.updateById(tbStudent);
        log.info("【============系统修改学生成功！！===========】");
        return ResultData.success(Const.UPDATE_STUDENT_SUCCESS);
    }

    /***
     * 根据ID查询学生信息
     * @param id
     * @return
     */
    @GetMapping("/findById/{id}")
    @ApiOperation("根据ID查询学生信息")
    public ResultData<StudentParam> findById(@PathVariable(name = "id") Long id) {
        log.info("【=======系统正在根据ID查询学生中....============】");
        StudentParam student = studentService.findById(id);
        log.info("【=======系统正在根据ID查询学生成功============】");
        return ResultData.success(Const.QUERY_STUDENT_SUCCESS,student);
    }


    /**
     * 分页查询学生信息
     *
     * @param queryPageBean
     * @return
     */
    @PostMapping("/findByPage")
    @ApiOperation("分页查询学生信息")
    public ResultData<PageResult<StudentParam>> findByPage(@RequestBody QueryPageBean queryPageBean) {
        log.info("【==========系统正在分页查询学生信息，前端分页查询数据为{}：=============】", queryPageBean);
        PageResult<StudentParam> pageResult = studentService.findByPage(queryPageBean);
        log.info("【==========系统正在分页查询学生信息成功！=============】");
        return ResultData.success(Const.QUERY_STUDENT_SUCCESS,pageResult);
    }





}

